#include<bits/stdc++.h> 
using namespace std;
// 	A和B是两个多项式，需要计算A*B的结果 
//1.每个输入具有一个测试用例，测试用例由两行组成，并且两行的格式是一样的都是
//  K N_1 a_1 N_2 a_2...这种，其中K是非零项的个数，N是幂次，a是系数，1≤K≤10
//  0≤N_k<...<N_2<N_1≤1000 
//2.对于每一个测试用例，输出A*B的结果，用与输入同样的格式输出,小数保留一位 
//3.遍历，数组或者struct 
double A[1001], B[1001], C[2001];
int main(){
	int Ka, Kb;
	//	读入A序列 
	cin>>Ka;
	for(int i = 0;i<Ka;i++){
		int n;
		double a;
		cin>>n>>a;
		A[n] = a;
	}
	//	读入B序列 
	cin>>Kb;
	for(int i = 0;i<Kb;i++){
		int n;
		double b;
		cin>>n>>b;
		B[n] = b;
	}
	//	进行乘法运算，遇到0的直接跳过节约时间 
	for(int i=0;i<1001;i++){
		if(A[i]==0) continue;
		for(int j=0;j<1001;j++){
			if(B[j]==0) continue;
			C[i+j] += A[i] * B[j]; 
		}
	}
	int count_ = 0;
	string ans = "";
	//	遍历C数组，从高幂次到低幂次，用sprintf转换格式，t开大一点，要考虑转换后字符串的长度 
	for(int i=2000;i>=0;i--){
		if(C[i]!=0)
		{
			++count_;
			char t[20];
			sprintf(t," %d %.1f",i,C[i]);//	空格格式不要出错咯 
			ans += t;
		}
	} 
	cout<<count_<<ans<<endl;
	return 0;
} 